package com.medica.ledproject.common;

import onbon.y2.Y2BulletinManager;
import onbon.y2.Y2DynamicManager;
import onbon.y2.Y2Env;
import onbon.y2.Y2Screen;
import onbon.y2.common.AlignmentType;
import onbon.y2.common.Y2Font;
import onbon.y2.play.*;
import onbon.y2.play.TextArea;

import java.awt.*;

public class bxy_demo {
    // IP地址，使用LedshowYQ软件设置
    private static String url = "http://192.168.0.98";

    public static void main(String[] args)throws Exception{
        // 初始化API，此操作只在程序启动时候执行一次，多次执行会出现内存错误
        Y2Env.initial();
        Y2Screen screen = new Y2Screen(url);
        //screen.turnOn();
       // screen.turnOff();
      sendPrograms();
       // soundArea();
    }

    // 更新节目显示
    public static void sendPrograms()throws Exception{
        // 创建screen对象，用于与控制卡的交互
        Y2Screen screen = new Y2Screen(url);

        // 登入
        // 登入账号和密码默认为guest
        screen.login("guest","guest");

        // 创建节目
        // 节目主要用于组合屏幕上显示的内容，它由多个区域组成
        // 控制器同一时间只能播放一个节目，它是控制器显示内容可以单独更新的最小单位
        // 多个节目默认轮流播放
        // 创建节目1（包括一个图文区和一个时间区）
        // 参数为节目编号 1
        ProgramPlayFile pf1 = new ProgramPlayFile(1);

        // 创建一个图文区
        // 创建区域需要注意区域位置和大小，不可以超出屏幕范围，区域和区域之间可以重叠
        // 控制器支持的区域有很多种，例如：图文区TextArea、时间区DateTimeArea、图片区PicArea、视频区VideoArea等
        // 区域可以设置显示特效、特效速度和停留时间等
        TextArea tArea = new TextArea(0,0,150,250);
        tArea.animation(52,16);
        tArea.setStayTime(0);
        // 创建显示内容
        // 显示内容相关设置，在page中设置，比如字体大小，字体颜色，背景颜色，对齐方式等，换行使用换行符\n
        TextAreaTextPage page = tArea.addTextSection("这个是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容");

        page.setFont(new Y2Font("宋体",12));
        page.fgColor(Color.getColor("#FF0000"));
        //page.setBgColor(Color.getColor(""));
        page.setVerticalAlignment(AlignmentType.NEAR);
        page.setHorizontalAlignment(AlignmentType.NEAR);

        // 创建时间区
        DateTimeArea dArea = new DateTimeArea(0,0,128,16);
        dArea.addUnits(DateTimePattern.HH_MM_SS).fgColor(Color.RED).getFont().setSize(12);

        // 把区域添加到节目中
        pf1.getAreas().add(tArea);
       // pf1.getAreas().add(dArea);

//        // 创建节目2
//        // 节目中包含图片和视频
//        ProgramPlayFile pf2 = new ProgramPlayFile(2);
//
//        // 创建一个图片区
//        PicArea pArea = new PicArea(0,0,64,96);
//
//        // 图片区域中添加图片
//        PicAreaPage pPage = pArea.addPage("F:\\播放素材\\素材\\pic\\100years.jpg");
//
//        // 创建一个视频区
//        VideoArea vArea = new VideoArea(64,0,64,96);
//
//        // 视频区中添加视频
//        VideoAreaPage vPage = vArea.addVideo("F:\\播放素材\\素材\\Video\\girls_640x480.mp4",100);
//
//        // 把区域添加到节目中
//        pf2.getAreas().add(pArea);
//        pf2.getAreas().add(vArea);
        // 更新节目
       // String list = screen.writePlaylist(pf1,pf2);
        String list = screen.writePlaylist(pf1);
        screen.play(list);

        // 登出
        screen.logout();
    }

    // 更新计时区
    public static void counterArea()throws Exception{
        Y2Screen screen = new Y2Screen(url);
        screen.login("guest","guest");
        ProgramPlayFile pf = new ProgramPlayFile(0);
        // 倒计时最后参数为true
        // 正计时最后参数为false
        CounterArea counterArea = new CounterArea(0,0,128,96,true);
        counterArea.targetDateTime(2021,12,25,12,0,0);
        counterArea.setDisplayPattern("mm分:ss秒");
        pf.getAreas().add(counterArea);
        String list = screen.writePlaylist(pf);
        screen.play(list);
        screen.logout();
    }

    // 更新动态区显示
    // 动态区独立于节目，可以按区域更新，动态区掉电不保存，动态区更新不会影响节目播放
    // 动态区一般用于实时更新显示的内容
    public static void sendDynamic()throws Exception{
        // 创建screen对象，用于与控制卡的交互
        Y2Screen screen = new Y2Screen(url);

        // 登入
        // 登入账号和密码默认都为guest
        screen.login("guest","guest");

        // 创建动态区管理
        Y2DynamicManager dyn = screen.dynamic();

        // 创建动态区文件
        DynamicPlayFile file = new DynamicPlayFile();

        // 于动态区文件中新增一个动态区域
        DynamicArea dynamicArea = file.createArea(0,0,128,96,0);

        // 动态区中添加显示内容，可以是图片，也可以是字符串
        DynamicAreaTextUnit text = dynamicArea.addText("这个是一个动态区");
        DynamicAreaPicUnit image = dynamicArea.addImage("F:\\播放素材\\素材\\pic\\100years.jpg");

        // 更新动态区
        dyn.write(file);

        // 设置动态区断电保存
       // dyn.save("0");

        // 登出
        screen.logout();
    }

    // 更新动态区素材
    // 更新动态区素材前，需要先更新一次动态区，然后一直更新动态区素材
    public static void sendDynamicUnits()throws Exception{
        Y2Screen screen = new Y2Screen(url);
        screen.login("guest","guest");
        Y2DynamicManager dyn = screen.dynamic();
        DynamicPlayFile dynFile = new DynamicPlayFile();
        DynamicArea dArea = dynFile.createArea(0,0,128,96,0);
        DynamicAreaTextUnit unit = dArea.addText("这个是动态区");
        dyn.write(dynFile);

        // 更新动态区素材
        DynamicUnitFile unitFile = new DynamicUnitFile();
        DynamicArea dynamicArea = unitFile.defineArea(0,0,128,96,0);
        dynamicArea.addText("这个是动态区素材");
        // 更新动态区素材
        dyn.writeUnitsOnly(unitFile);

        // 登出
        screen.logout();
    }

    // 公告区更新
    public static void sendBulletin()throws Exception{
        // 创建screen对象，用于与控制卡交互
        Y2Screen screen = new Y2Screen(url);

        // 登入
        screen.login("guest","guest");

        // 公告管理
        Y2BulletinManager bulletinManager = screen.bulletin();

        // 建立公告一
        BulletinArea bArea1 = new BulletinArea(1,"公告一",0,0,128,16);
        bArea1.content("这个公告");

        // 建立公告二
        BulletinArea bArea2 = new BulletinArea(2,"公告二",0,32,128,16);
        bArea2.content("这是第二个公告");

        // 将公告一、公告二上传
        bulletinManager.write(bArea1);
        bulletinManager.write(bArea2);

        // 播放公告
        bulletinManager.play();

        // 删除公告二
        bulletinManager.delete(2);

        // 停播
        bulletinManager.stop();

        // 登出
        screen.logout();
    }

//    // 语音播放
//    public static void soundArea()throws Exception{
//        Y2Screen screen = new Y2Screen("http://192.168.100.3");
//        screen.login("guest","guest");
//        screen.clearPlayResources();
//        String s1 = "苏A00000垃圾类型其他垃圾垃圾重量0点25吨清运小区测试小区";
//        TTSArea area  = new TTSArea(s1);
//        area.setGender(0);// 性别
//        area.setSpeed(50);// 速度
//        area.setTone(50);// 语气
//        area.setVolume(50);// 音量
//        area.setNumber(0);
//        area.setOne(0);
//        area.setBasespeed(1);
//        area.setEffect(3);
//        area.setSilent(1);
//        area.setLoop(1);
//
//        Y2BulletinManager mgr =  screen.bulletin();
//        try{
//            mgr.addVoice(area);
//        }catch (Exception e){
//            e.printStackTrace();
//        }
//        screen.logout();
//    }

    // 播放直播流显示
    public static void sendWebVideo()throws Exception{
        // 创建screen对象，用于与控制卡的交互
        Y2Screen screen = new Y2Screen(url);

        // 登入
        screen.login("guest","guest");

        // 创建节目
        ProgramPlayFile pf = new ProgramPlayFile(0);

        // 创建视频区
        VideoArea vArea = new VideoArea(0,0,128,96);

        // 添加直播流视频
        VideoAreaPage page = vArea.addVideo("rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov",100);

        // 设置网络视频属性
        page.setSource("10");

        // 视频区添加到节目中
        pf.getAreas().add(vArea);

        // 更新节目
        String list = screen.writePlaylist(pf);
        screen.play(list);

        // 登出
        screen.logout();
    }

    // 其他命令
    public static void otherCmd()throws Exception{
        // screen
        Y2Screen screen = new Y2Screen(url);
        screen.turnOn();

        // login
        screen.login("guest","guest");

        // other CMD
        // 关机命令 使屏幕黑屏，非物理断电屏幕或者控制器
        screen.turnOff();

        // 开机命令 使屏幕从黑屏状态变为亮的状态
        screen.turnOn();

        // 校时命令
        screen.syncTime();

        // 音量调节命令 音量范围 0--100
        screen.changeVolume(60);

        // 亮度调节命令 亮度范围0--255
        screen.changeBrightness(255);

        // 清除播放资源  删除控制器中所有显示内容，调用该命令后，屏幕上会显示请加节目等字样
        screen.clearPlayResources();

        // 锁定当前屏幕画面
        screen.lock();

        // 解锁当前屏幕画面
        screen.unlock();

        // 锁定节目 多节目播放时，调用该命令后，只显示被锁定节目
        screen.lockProgram(0);

        // 解除节目锁定
        screen.unlockProgram(0);

        // 截取屏幕显示内容
        // 返回一张图片，该图片为截取瞬间屏幕显示内容
        screen.capture();
    }

    // 修改登入密码
    public static void changePassword()throws Exception{
        Y2Screen screen = new Y2Screen(url);

        screen.login("guest","guest");

        // 修改登入密码
        screen.changePassword("guest","123456");

        // 登出
        screen.logout();

    }

    // 更新固件
    public static void updateFirmware()throws Exception{
        Y2Screen screen = new Y2Screen(url);

        screen.login("guest","guest");

        // 更新固件
        screen.updateFirmware("C:\\Users\\Judy\\Desktop\\BX-Y08A_upgrade_V21061600.bxf");

        screen.logout();
    }

}
